op(1150,xfy,&).
op(1200,xfy,→).


% Frases Afirmativas
sa(sa(SN,SV))--> sn(SN,Genero,Numero),sv(SV,Numero).

% Sujeitos
sn(sn(Artigo,Substantivo,SE),Genero,Numero)--> artigo(Artigo,Definido,Genero,Numero),substantivo(Substantivo,Genero,Numero),se(SE).
sn(sn(Artigo,Substantivo),Genero,Numero)--> artigo(Artigo,Definido,Genero,Numero),substantivo(Substantivo,Genero,Numero).


% Predicados
sv(sv(Verbo,SN), Numero) --> verbo(Verbo,transitivo_direto,Numero,Pessoa,Tempo),sn(SN,Genero,Numero2).
sv(sv(Verbo), Numero) --> verbo(Verbo,intransitivo,Numero,Pessoa,Tempo).


% Explicativa
se(se(preposicao(que),SN,Verbo)) --> [que],sn(SN,Genero,Numero),verbo(Verbo,Transitividade,Numero,Pessoa,Tempo).
se(se(preposicao(que),Verbo,SN)) --> [que],verbo(Verbo,transitivo_direto,Numero,Pessoa,Tempo),sn(SN,Genero,Numero2).
se(se(preposicao(que),Verbo)) --> [que],verbo(Verbo,intransitivo,Numero,Pessoa,Tempo).



artigo(artigo(HEAD,Definido,Genero,Numero),Definido,Genero,Numero,[HEAD|TAIL],TAIL):-artigo_dic(HEAD,Definido,Genero,Numero).
substantivo(substantivo(HEAD,Genero,Numero),Genero,Numero,[HEAD|TAIL],TAIL):-substantivo_dic(HEAD,Genero,Numero).
verbo(verbo(HEAD),Transitividade,Numero,Pessoa,Tempo,[HEAD|TAIL],TAIL):-verbo_dic(HEAD,Transitividade,Numero,Pessoa,Tempo).


artigo_dic(o,definido,masculino,singular).
artigo_dic(os,definido,masculino,plural).
artigo_dic(a,definido,feminino,singular).
substantivo_dic(menino,masculino,singular).
substantivo_dic(cachorro,masculino,singular).
substantivo_dic(cachorros,masculino,plural).
substantivo_dic(menina,feminino,singular).
verbo_dic(caiu,intransitivo,singular,terceira,passado).
verbo_dic(beijou,transitivo_direto,singular,terceira,passado).
verbo_dic(viu,transitivo_direto,singular,terceira,passado).
verbo_dic(correu,intransitivo,singular,terceira,passado).
